Module trennen eine unsichtbare und unantastbare Implementation von einer sichtbaren und zugänglichen Schnittstelle.
Über die Schnittstelle bietet jedes Modul Operationen und Daten an, die andere Module in Anspruch nehmen können. In VBA-Modulen werden Schnittstellenelemente durch das Schlüsselwort Public definiert. Public kann sowohl Variablen und benannten Konstanten, als auch Prozeduren vorangestellt werden. Zum Beispiel:
Public Name As String Public Const PI As Double = 3.14159 Public Function Telefon(Name As String) As String ... End Function
Alle Elemente, die nur vom Modul selbst in Anspruch genommen werden können, gehören zur Implementation. Indem ein Modul gewisse Programmelemente für den privaten Gebrauch kennzeichnet, schützt es sie vor fremden Zugriffen und unbefugten Manipulationen. Ausserdem kann der Programmierer eines Moduls private Elemente einfacher ändern als öffentliche, da er davon ausgehen darf, dass alle Zugriffe von seinem eigenen Modul aus erfolgen und er sie somit leicht finden und anpassen kann.
In VBA-Modulen werden private Elemente durch das Schlüsselwort Private gekennzeichnet. Private kann Variablen, benannten Konstanten und Prozeduren vorangestellt werden. Zum Beispiel:
Private gefunden As Boolean Private Sub Sortiere() ... End Sub
VBA unterscheidet verschiedene Arten von Modulen. Das Bild unten zeigt einen Ausschnitt aus einem Projekt, das verschiedene Modularten verwendet (Die nachfolgenden Themen verweisen auf dieser Module). Die unter den Microsoft Excel Objekten aufgeführten Module stehen nur im Excel-Anwendungspaket zur Verfügung. Formulare (Formularmodule), (Standard-)Module und Klassenmodule sind dagegen Teil von VBA und somit in jedem Anwendungspaket, das VBA integriert, verfügbar.
Formulare (engl. user forms oder forms) kombinieren Programmcode mit einer grafischen Benutzerschnittstelle. Ein Entwickler verwendet Formulare, um Komponenten für die Kommunikation mit dem Endbenutzer zu realisieren. Excel bietet als Alternative die Tabellenblätter an.
Standardmodule (engl. modules) besitzen keine grafische Benutzerschnittstelle. Eine Entwicklerin verwendet sie, um umfangreichen Programmcode zu modularisieren. Bei guter Modularisierung entstehen Bibliotheken mit Code, der in mehreren Projekten verwendet werden kann.
Klassenmodule (engl. class modules) besitzen ebenfalls keine Benutzerschnittstelle. Anders als bei Standardmodulen können von Klassenmodulen aber zur Laufzeit mehrere Instanzen erstellt werden. Ein Entwickler verwendet Klassenmodule, um Objekte zu beschreiben. Die Modulschnittstellen bilden die Eigenschaften und Methoden der Objekte ab, die Implementationen modellieren ihr Verhalten.